use bytes::Bytes;
use crate::untils::url::SipUrl;

///对应一个sip对话处理的上下文机关信息
///此对话对应一条sip dialog...一般转接会产生两个dialog
///而转接如果产生通话,,对应的rtp的相对消息处理只会有一个.因为rtp需要进行大量的数据交换
#[derive(Debug)]
pub struct DialogContext {
  /// 一个dialog需要以下3个字段来判定唯一性.而cseq用来判断事务的序号
	///当前对话的唯一标识
	call_id: Bytes,
	/// 对应当前dialog的呼入者的字段
	from: SipUrl,
	///对应当前dialog的to字段
	to: SipUrl,
	/// 当前已经使用的cseq的值..每一个从0开始
	pub(crate) cseq: u8,


	/// 对应联接上层业务逻辑处理的消息收发,第一个是发送,第二个是接收..
	// with_business: MesasgeExchange<ChannelEvent, CommandMsg>,
	/// 与网络发送相关.此对象不进行接收,接收是由分发器完成
	// transport: TransportProtocol,
	/// 给dialog管理器的发送器.
	// with_manager:MesasgeExchange<DialogEvent, DialogMessage>,
	/// 向rtp端发送消息的实例..目前不需要从rtp端接收内容.
	// to_rtp: mpsc::UnboundedSender<RtpEvent>,
	/// 媒体选择器..保存对应的媒体选择.
	// sdp:Sdp
	/// 当前对话状态
	// state: DialogState,

	/// 保存最后一次发送的数据包.用来重试发送
	pub(crate) last_send_bytes: Option<Bytes>,
	// pub(crate) wait_resp_method: WaitSipMessage,
	/// 保存当前事务的状态,一个对话同一时间只会有一个事务.
	// tran_state: SipTransactionState,
	/// 当前正在使用的事务处理器
	// pub(crate) tran_handler: SipTransaction,



	/// 用来做为其他地方引用数据的基础项.此数据只增加,不移除.也不能换位置
	save_data: Vec<u8>,
}
